home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / gfx / show / svoUtah22.lha / svoUtahRLE / source / URT / lib / getopt.c < prev    next >
C/C++ Source or Header  |  1991-08-09  |  2KB  |  97 lines

  1. /*
  2.  * This software is copyrighted as noted below.  It may be freely copied,
  3.  * modified, and redistributed, provided that the copyright notice is 
  4.  * preserved on all copies.
  5.  * 
  6.  * There is no warranty or other guarantee of fitness for this software,
  7.  * it is provided solely "as is".  Bug reports or fixes may be sent
  8.  * to the author, who may or may not act on them as he desires.
  9.  *
  10.  * You may not include this software in a program or other software product
  11.  * without supplying the source, or without informing the end-user that the 
  12.  * source is available for no extra charge.
  13.  *
  14.  * If you modify this software, you should include a notice giving the
  15.  * name of the person performing the modification, the date of modification,
  16.  * and the reason for such modification.
  17.  */
  18. /*
  19.  * From Henry Spencer @ U of Toronto Zoology, slightly edited.
  20.  */
  21.  
  22. /*
  23.  * getopt - get option letter from argv
  24.  */
  25.  
  26. #include "rle_config.h"
  27. #include <stdio.h>
  28. #ifdef USE_STRING_H
  29. #include <string.h>
  30. #define index strchr
  31. #else
  32. #include <strings.h>
  33. #endif
  34.  
  35. char    *optarg;    /* Global argument pointer. */
  36. int    optind = 0;    /* Global argv index. */
  37.  
  38. static char    *scan = NULL;    /* Private scan pointer. */
  39.  
  40. extern char    *index();
  41.  
  42. int
  43. getopt(argc, argv, optstring)
  44. int argc;
  45. char *argv[];
  46. char *optstring;
  47. {
  48.     register char c;
  49.     register char *place;
  50.     
  51.     optarg = NULL;
  52.     
  53.     if (scan == NULL || *scan == '\0') {
  54.     if (optind == 0)
  55.         optind++;
  56.     
  57.     if (optind >= argc || argv[optind][0] != '-' ||
  58.         argv[optind][1] == '\0')
  59.         return( EOF );
  60.  
  61.     if (strcmp(argv[optind], "--")==0) {
  62.         optind++;
  63.         return( EOF );
  64.     }
  65.     
  66.     scan = argv[optind]+1;
  67.     optind++;
  68.     }
  69.     
  70.     c = *scan++;
  71.     place = index(optstring, c);
  72.     
  73.     if (place == NULL || c == ':') {
  74.     fprintf(stderr, "%s: unknown option -%c\n", argv[0], c);
  75.     return( '?' );
  76.     }
  77.     
  78.     place++;
  79.     if (*place == ':') {
  80.     if (*scan != '\0') {
  81.         optarg = scan;
  82.         scan = NULL;
  83.     } else {
  84.         if (optind >= argc) {
  85.         fprintf(stderr,
  86.             "%s: missing argument after -%c\n",
  87.             argv[0], c);
  88.         return( '?' );
  89.         }
  90.         optarg = argv[optind];
  91.         optind++;
  92.     }
  93.     }
  94.     
  95.     return( c );
  96. }
  97.